Software “processes” may relate to time in a wide variety of ways (“process” is used broadly herein to include not only processes per se but also threads, tasks, coroutines, interrupt handlers, and other pieces of executable code). Some processes are time-sliced or otherwise share processor access with other processes. In some cases, sharing processer access makes it difficult or impractical to determine precisely when a given process will run. Some processes execute in “real” time, responding immediately (or within some specified tolerance) to movement or other real-world activity. Some processes run at periodic intervals, to service a network queue or poll hardware devices, for example.
The hardware and system software that are available to provide time-related services to processes also vary widely. Hardware support may include low-resolution or high-resolution real-time clocks, countdown timers, and hardware interrupts triggered by specified chronological conditions or events, for example. System software may include hooks for user-specified interrupt handlers, as well as particular process schedulers, device drivers, timer engines, time synchronization packets, timestamps, process priorities, and application program interfaces (APIs), for example, the details of which vary.